X3-Formeln 

Zusammenfassung

In einer Reihe von Parametrierungsmasken müssen Berechnungsformeln erfasst werden, die auch als Adonix-Ausdrücke bezeichnet werden (die Ausführungs-Engine der in X3-Technologie geschriebenen Softwareprogramme heißt Adonix). Diese Ausdrücke werden in ein algebraischer Form ausgedrückt und zählen zu einer allgemeineren Sprache. Nachstehend werden die in diesen Formeln verwendbaren Funktionen allgemein beschrieben.

Bei der Erfassung von Formeln stehen zahlreiche Hilfefunktionen zur Verfügung, die sich sowohl auf die verwendbaren Funktionen und Variablen beziehen als auch auf die Erläuterung der Bedeutung der Formeln. Diese Hilfefunktionen sind auch imFormeleditorzugänglich.

Mit dem Taschenrechnerkönnen Ausdrücke (mit Konstanten und im Kontext verfügbaren Variablen) getestet werden.

Formeltyp

X3-Formeln können alphanumerisch, numerisch oder vom Typ Datum sein. Je nachdem, an welcher Stelle die Parametrierung durchgeführt wird, kann ein bestimmter Typ notwendig sein (obwohl in einer Formel alle Ausdruckstypen verwendet werden können, können Funktionen von einem bestimmten Typ Argumente von einem anderen Typ benötigen). Mit der Funktion Typ kann der Typ einer Variablen getestet werden.

Aufbau einer X3-Formel

Eine Formel setzt sich aus Konstanten, Operatoren, Variablen und Funktionen zusammen.

Konstanten

Mögliche Konstantentypen:

*    alphanumerische Konstanten: in einfache oder doppelte Hochkommata gesetzt. Hier zwei Beispiele für gültige Zeichenketten:

 

"Das ist sicher"

 

'eine besondere "Zeichenkette"'

*    numerische Konstanten: mit Dezimalpunkt, sofern notwendig. Hier zwei Beispiele für gültige numerische Konstanten:

 

-2.5

 

123000

*    Konstante vom Typ Datum: ausgedrückt im Format [ Tag / Monat / Jahr ]. Das Jahr muss vierstellig ausgedrückt werden. Hier zwei Beispiele für gültige Konstanten vom Typ Datum:

 

[15/3/2002]

 

[21/05/1819]

*    logische Konstanten: numerische Konstanten, die genau zwei Werte annehmen können: 1 (oder beliebiger von null verschiedener Wert) = wahr, 0 = falsch.

Operatoren

Es stehen folgende Operatoren zur Verfügung:

 

+

zur Addition zweier Zahlen, zur Addition eines Datums und einer Anzahl von Tagen und zur Aneinanderreihung von Zeichenketten.

 

-

zur Subtraktion zweier Zahlen, zur Subtraktion einer Anzahl von Tagen von einem Datum und zur Trennung von Zeichenketten per Einfügen eines Leerzeichens.

 

*

Multiplikation zweier Zahlen

 

/

Division zweier Zahlen

 

^

Potenz

 

<

<=

>

>=

<=

Vergleichsoperatoren

 

 

and

or

xor

not

Logische Operatoren, die auch abgekürzt geschrieben werden können

&

|

?

!

Die Anzahl von Verschachtelungen ist unbegrenzt.

Variablen

Variablen werden im Allgemeinen in folgender Form ausgedrückt:

 

[ Klasse ] Variablenname ( Index )

Beispiel:

 

[F:BPC]BPCNAME

 

MA_VARIABLE

 

ELEMENT(33)

Der Variablenname Variablenname wird mit Buchstaben und / oder Ziffern ausgedrückt, wobei es sich beim ersten Zeichen stets um einen Buchstaben handeln muss. Unterstriche sind ebenfalls zulässig. Es werden die ersten 12 Zeichen des Variablennamens ausgewertet. Außer einigen Schlüsselwörtern der Programmiersprache wieFile, Untilund Commit sind alle Namen erlaubt. Wird ein Variablenname in Kleinbuchstaben erfasst, so wird er automatisch in Großbuchstaben umgewandelt, sofern es sich nicht um ein Schlüsselwort handelt.

Manche Variablen können mehrdimensional sein, d. h. Elementtabellen entsprechen (erlaubt sind 1 bis 4 Dimensionen). In diesem Fall werden die Indizes als per Komma getrennte numerische Ausdrücke vorgegeben (Beispiel für eine gültige Syntax: M_TB(1,2,8)).

Klassen entsprechen einer Reihe von kontextabhängigen Variablen. Die folgenden Klassen kommen am häufigsten vor:

*    [V]: Klasse der globalen Variablen. Globale Variablen sind an die X3-Sitzung gebunden. Nach der Anlage einer globalen Variable kann auf diese zugegriffen werden, solange sie nicht aufgelöst wird und so lange die X3-Sitzung läuft. Die Deklaration erfolgt mithilfe von speziellen Anweisungen (je nach Variablentyp Integer, Decimal, Char, Date, Libelle, Shortint, Float, Double).

*    [L]: Klasse der lokalen Variablen Diese Klasse ist an eine Verschachtelung von Unterprogrammen gebunden (bei jeder Call -Anweisung wird eine neue Klasse von lokalen Variablen angelegt, die die vorherige Klasse verschattet). Lokale Variablen werden auf dieselbe Weise deklariert wie globale Variablen, der Deklaration muss jedoch das Schlüsselwort Localvorangestellt werden.

*    [C]: Nummernkreisklassen Diese Variablen werden von allen Arbeitsplätzen eines Ordners gemeinsam genutzt. Sie werden von speziellen Entwicklungsfunktionen angelegt.

*    [F:abv] oder [abv]: an eine mit der File-Anweisung deklarierte Tabelle gebundene Variablenklasse. Hier finden sich die Werte des aktuellen Datensatzes.

*    [M:abv] oder [abv]: an eine mit der Mask-Anweisung erfasste Maske gebundene Variablenklasse. Hier finden sich die erfassten Werte und die möglichen Anzeigewerte (jedes Register auf einer Maske wird als Maske betrachtet).

Diese Klasse ist nicht obligatorisch, denn die Standardklasse kann mithilfe von Regeln ermittelt werden.

Daneben gibt es eine Reihe von so genannten Systemvariablen, die direkt von X3 verwaltet werden. Diese Variablen werden im Gegensatz zu den anderen Variablen bei der Erfassung nicht in Großbuchstaben umgewandelt, weil sie zu den Schlüsselwörtern zählen und daher in Kleinbuchstaben angezeigt werden. Hier einige Beispiele für verwendbare Systemvariablen (die Liste ist nicht vollständig):

Name

Typ

Definition

nomap

Zeichenkette

Name des aktuellen Ordners

datesyst

date

änderbares Systemdatum

adxdir

Zeichenkette

X3-Datenbankrepository

nolign

numerisch

aktuelle Zeilennummer

fstat

numerisch

Rückgabestatus nach dem Lesen aus einer Tabelle oder dem Schreiben in eine Tabelle

In der Engine definierte Funktionen

Eine Funktion wird in Form von Funktion(Argumentliste) ausgedrückt. Es gibt sehr viele Funktionen: Verarbeitungen für Zeichenketten, Datumsberechnungen, klassische numerische Funktionen, Rundungs- und Abschneidefunktionen, statistische Funktionen etc.

Nachstehend eine Liste der wichtigsten in X3 verwendbaren Funktionen. Für die Funktionstabelle gelten folgende Notationskonventionen:

*    v = Argument beliebigen Typs (analog v1, v2, v3 etc.)

*    c = Argument vom Typ Zeichenkette

*    x = numerisches Argument

*    n, p, q etc. = ganzzahliges Argument

*    V = Variable

*    liste = Liste von Variablen oder Ausdrücken TABLO-Variablen (Typ Tabelle) können in diesen Listen im Format TABLO(I) (nur ein Index), TABLO (sämtliche Indizes werden durchlaufen) und TABLO(I...J) (die Indizes I bis einschließlich J werden durchlaufen) verwendet werden.

Syntaxen

Typ

Definition

date$

date

Tagesdatum

sin(x), cos(x), tan(x)

numerisch

trigonometrische Funktionen

asin(x),acos(x)...

numerisch

inverse trigonometrische Funktionen

log(x),exp(x),ln(x)

numerisch

logarithmische Funktionen

abs(x), sgn(x)

numerisch

absoluter Wert, Vorzeichen

ar2(x), arr(x,y)

numerisch

Rundung auf zwei Dezimalstellen, Rundung von x auf y

int(x), mod(x,y)

numerisch

ganzzahliger Anteil, modulo

len(c)

numerisch

Länge einer Zeichenkette

day(d),month(d),year(d)

numerisch

Ausgabe des Tags, Monats, Jahrs eines Datums

dayn(d),week(d)

numerisch

Nummer des Tags innerhalb der Woche, Wochennummer

num$(x)

Zeichenkette

wandelt eine Zahl in eine Zeichenkette um (Dezimaldarstellung)

space$(n), chr$(n)

Zeichenkette

aus n Leerzeichen und einem Zeichen mit internem Code n zusammengesetzte Zeichenkette

string$(n,c), string$(n,x)

Zeichenkette

aus n c-Zeichen zusammengesetzte Zeichenkette

(oder n Zeichen mit Code x)

day$(d), month$(d)

Zeichenkette

Name des Tags, des Monats

addmonth(d,n)

date

Datum, zu dem n Monate hinzugefügt wurden

eomonth(d)

date

letzter Tag des Monats zu Datum d

left$(c,n), right$(c,n)

Zeichenkette

linker / rechter Teil einer aus n Zeichen bestehenden Zeichenkette

mid$(c,n,p), seg$(c,n,p)

Zeichenkette

Ausgabe einer Unterzeichenkette einer gegebenen Zeichenkette

gdat$(n,p,q)

date

Aufbau eines Datums (n = Tag, p = Monat, q = Jahr)

pat(c1,c2)

numerisch

Prüfung, ob die Zeichenkette c1 dem Modell c2 entspricht (konform: 1, sonst: 0). Das Modell darf die Metazeichen * (beliebige Anzahl von beliebigen Zeichen), ? (beliebiges Zeichen) und # (beliebige Ziffer) umfassen.

min(liste), max(liste)

alle Typen

Minimum oder Maximum aus einer Reihe von Variablen oder Werten

sum(liste), prd(liste)

numerisch

Summe oder Produkt aus einer Reihe von Variablen oder Werten

avg(liste), var(liste)

numerisch

Mittelwert oder Varianz aus einer Reihe von Variablen oder Werten

sum(liste)

Zeichenkette

Aneinanderreihung einer Reihe von Variablen oder Zeichenkettenwerten

uni(liste)

numerisch

Prüfung, ob eine Reihe von Variablen oder Werten eindeutig ist

find(v,liste)

numerisch

Suche nach einem beliebigen Wert in einer Liste

evalue(c)

alle Typen

Auswertung einer Zeichenkette, die einen Ausdruck umfasst

format$(c,v)

Zeichenkette

Formatierung eines Wertes im gegebenen Format c

toupper(c),tolower(c)

Zeichenkette

Umwandlung in Kleinbuchstaben, in Großbuchstaben

sigma(V=v1,v2,v3)

numerisch

Summe (V variiert zwischen v1 und v2) des Ausdrucks c3, Funktion von V

 Entwicklungsfunktionen

Darüber hinaus gibt es von den Entwicklern definierte Funktionen, die in Formeln verwendbar sind. Hierfür ist folgende Syntax zu verwenden:

func TRAIT.FONCT(Funktionsliste),

wobei TRAIT für den Verarbeitungsnamen und FONCT für den betreffenden Funktionsnamen steht. Die zur Verfügung stehenden Funktionen sind in der Unterprogrammtabelledokumentiert.